#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define mp make_pair
const int maxn = 1e5+10;
const int mod = 1e9+7;
const int INF = 0x3f3f3f3f;
int d[4][2]={1,0,0,1,-1,0,0,-1};
ll a,b;
map<ll,ll> ma;//标记这个数字是否用过 
void bfs(ll now){
    queue<ll> q;
    q.push(now);
    ma[now]=0;
    while(!q.empty()){
        ll mid=q.front();q.pop();
        if(mid==b){
            cout<<ma[mid]<<endl;
            return ;
        }
        if(mid<b){//这就是那个坑点小于的时候直接输出差值 
            cout<<ma[mid]+(b-mid)<<endl;
            return ;
        }
        ll x=mid+1,y=mid/2;
        if(!ma.count(x)){
            q.push(x);
            ma[x]=ma[mid]+1;
        }
        if(mid%2==0&&!ma.count(y)){
            q.push(y);
            ma[y]=ma[mid]+1;
        }
    }
}
/*
这个题有点像 抓住那头牛
用bfs去搞他下一步能走的情况，每次统计步数
一旦找到 b就结束就可以了 
注意一个坑点就是 a只会向下成倍减少
所以如果a小于b直接输出b-a就可以了 
*/
int main() {
    ios::sync_with_stdio(0);
    #ifdef Uncle_drew
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #else
    #endif
    cin>>a>>b;
    if(a<b) cout<<(b-a)<<endl;
    else{
        bfs(a);
    }   
    return 0;
}